package com.example;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;

public class DateTest {

    public static void main(String[] args) {
        DateTest dateTest = new DateTest();
        dateTest.testDate();
        dateTest.sleep();
        dateTest.calendarBase();
        dateTest.calendarSet();
    }

    void testDate() {
        Date date = new Date();
        System.out.println(date.toString());
        System.out.printf("printf=>输出日期" + "%tc", date);
        System.out.printf("printf=>输出日期" + "%tF", date);
        System.out.printf("printf=>输出日期" + "%tD", date);

        // 格式化日期
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("格式化日期=》" + simpleDateFormat.format(date));
        // 获取 时间戳
        long timeStamp = (date.getTime() / 1000);
        System.out.println("时间戳：" + timeStamp);
    }

    // 睡眠
    void sleep() {
        try {
            System.out.println(new Date() + "\n");
            // 睡眠3秒  就是等待3秒然后输入 其实就是阻断3s
            Thread.sleep(1000 * 3);
            System.out.println(new Date() + "\n");
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }

    // Calendar 日历 Calendar 是一个抽象类，不能直接实例化，需要通过 getInstance() 方法获取实例
    void calendarBase() {
        // 获取当前日期
        Calendar calendar = Calendar.getInstance();
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        System.out.println("格式化当前日期：" + simpleDateFormat.format(calendar.getTime())); // 获取的不是时间戳
        System.out.println("当前日期：" + calendar.getTime()); // 获取的不是时间戳
        System.out.println("当前年份：" + calendar.get(Calendar.YEAR));
        System.out.println("当前月份：" + calendar.get(Calendar.MONTH));
        System.out.println("当前日期：" + calendar.get(Calendar.DATE));
        System.out.println("当前小时：" + calendar.get(Calendar.HOUR));
        System.out.println("当前分钟：" + calendar.get(Calendar.MINUTE));
        System.out.println("当前秒：" + calendar.get(Calendar.SECOND));
    }

    // final 表示常量 不能被重写
    public final void calendarSet() {
        Calendar calendar = Calendar.getInstance();
        // 设置日期 带上时分秒
        calendar.set(2025, 1, 9, 10, 20, 30);
        System.out.println("设置日期：" + calendar.getTime());
        // 获取当前时间
        System.out.println("当前时间：" + calendar.get(Calendar.YEAR));
        System.out.println("当前时间：" + calendar.get(Calendar.MONTH));
        System.out.println("当前时间：" + calendar.get(Calendar.DATE));
        System.out.println("当前时间：" + calendar.get(Calendar.HOUR));
        System.out.println("当前时间：" + calendar.get(Calendar.MINUTE));
        System.out.println("当前时间：" + calendar.get(Calendar.SECOND));
    }

    // Calendar 时间的加减
    public final void calendarAdd() {
        Calendar calendar = Calendar.getInstance();

        // 10天后
        calendar.add(Calendar.DATE, 10);
        System.out.println("10天后：" + calendar.getTime());

        // 10天前
        calendar.add(Calendar.DATE, -10);
        System.out.println("10天前：" + calendar.getTime());

        // 10小时后
        calendar.add(Calendar.HOUR, 10);
        System.out.println("10小时后：" + calendar.getTime());

        // 10小时前
        calendar.add(Calendar.HOUR, -10);
        System.out.println("10小时前：" + calendar.getTime());

        // 10分钟前
        calendar.add(Calendar.MINUTE, -10);
        System.out.println("10分钟前：" + calendar.getTime());

        // 10分钟前
        calendar.add(Calendar.MINUTE, 10);
        System.out.println("10分钟前：" + calendar.getTime());
    }

    // GregorianCalendar 是 Calendar 的子类，可以获取当前日期
    public final void gregorianCalendar() {
        GregorianCalendar gregorianCalendar = new GregorianCalendar();
        System.out.println("当前日期：" + gregorianCalendar.getTime());
        // 判断是否是闰年   gregorianCalendar.isLeapYear(2025)
        System.out.println("是否是闰年：" + gregorianCalendar.isLeapYear(2025));

    }
}
